package br.ucb.tcc.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
 * @author italoricci
 * 
 * Classe respons�vel por fazer as devidas manipulacoes com arquivo .properties
 * 
 *
 */
public class FileUtils {

	/**
	 * 
	 * Metodo responsavel por criar o diretorio informado pelo usu�rio.
	 * 
	 * 
	 * @param _diretorio
	 * @return boolean true se foi criado, false se j� existe ou nao pode ser
	 *         criado
	 * @throws IOException
	 */
	public static boolean criarDiretorioArquivo(String _diretorio) {
		File diretorio = new File(_diretorio);
		return diretorio.mkdir(); // criando diretorio
	}

	/**
	 * 
	 * Metodo responsavel por criar o arquivo properties, e incluir os valores
	 * no mesmo
	 * 
	 * @param _diretorio
	 *            endereco fisico do diretorio na maquina do usuario
	 * @param _nomeArquivo
	 *            nome do arquivo .properties que vai ser gerado
	 * @param _mapsValores
	 *            maps conteudo a chave e os valores do .properties
	 * @throws IOException
	 */
	public static void criarArquivoProperties(String _diretorio,
			String _nomeArquivo, Map<String, String> _mapsValores) {
		try {
			Properties properties = new Properties();
			File file = new File(_diretorio + _nomeArquivo);
			file.createNewFile();
			for (String chave : _mapsValores.keySet()) {
				properties.setProperty(chave, _mapsValores.get(chave));
			}
			properties.store(new FileOutputStream(file), "");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * Metodo responsavel por fazer a leitura de uma propriedade do .properties
	 * 
	 * @param _diretorio
	 *            onde o arquivo se encontra
	 * @param _nomeArquivo
	 *            o nome do arquivo
	 * @param _chaveLer
	 *            a chave a ser lida
	 * @return String com o valor da chave lida
	 * @throws IOException
	 */
	public static String lerValorProperties(String _diretorio,
			String _nomeArquivo, String _chaveLer) {
		try {
			File file = new File(_diretorio + _nomeArquivo);
			if (file.exists()) {
				Properties properties = new Properties();
				FileInputStream fileInputStream = new FileInputStream(file);
				properties.load(fileInputStream);
				fileInputStream.close();
				return properties.getProperty(_chaveLer);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "";
	}

	/**
	 * Metodo responsavel por fazer a mudanca do valor de uma chave.
	 * 
	 * @param _diretorio
	 *            onde o arquivo se encontra
	 * @param _nomeArquivo
	 *            nome do arquivo
	 * @param _chaveMudarValor
	 *            chave a ser mudada
	 * @param _valor
	 *            valor a ser mudado.
	 * @throws IOException
	 */
	public static void mudarValorProperties(String _diretorio,
			String _nomeArquivo, String _chaveMudarValor, String _valor) {
		try {
			File file = new File(_diretorio + _nomeArquivo);
			if (file.exists()) {
				Properties properties = new Properties();
				properties.setProperty(_chaveMudarValor, _valor);
				properties.store(new FileOutputStream(file), "");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
